package main

/*
 * _______________#########_______________________
 * ______________############_____________________
 * ______________#############____________________
 * _____________##__###########___________________
 * ____________###__######_#####__________________
 * ____________###_#######___####_________________
 * ___________###__##########_####________________
 * __________####__###########_####_______________
 * ________#####___###########__#####_____________
 * _______######___###_########___#####___________
 * _______#####___###___########___######_________
 * ______######___###__###########___######_______
 * _____######___####_##############__######______
 * ____#######__#####################_#######_____
 * ____#######__##############################____
 * ___#######__######_#################_#######___
 * ___#######__######_######_#########___######___
 * ___#######____##__######___######_____######___
 * ___#######________######____#####_____#####____
 * ____######________#####_____#####_____####_____
 * _____#####________####______#####_____###______
 * ______#####______;###________###______#________
 * ________##_______####________####______________
-----------------------------------
*/
import (
	"encoding/json"
	"fmt"
)

type Student struct {
	ID     int    `json:"ID,omitempty"`
	Gender string `json:"Gender"`
	name   string //私有属性不能被json包访问
	Sno    string `json:"Sno"`
}

func main() {
	var s1 = &Student{
		ID:     1,
		Gender: "男",
		name:   "张三",
		Sno:    "s0001",
	}
	fmt.Println(s1)
	//序列化
	strByte, err := json.Marshal(s1)
	fmt.Println(strByte)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(strByte))

	//反序列化
	str := `{"ID":3,"Gender":"女","Sno":"s0003"}`
	var s2 = &Student{}
	fmt.Println(s2)
	err = json.Unmarshal([]byte(str), s2)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(s2)
	fmt.Println(s2.Gender)
}
